<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        let obj = {
            name:'hzj',
            age:18,
            sex:'男'
        }
        // 我问你一个问题，如何判断一个对象里是否具有一个属性？如何删除对象中的某个属性？
        // 我知道你的答案: 直接用in、delete不就行了吗？
        // 但是这些是命令式语句，其实放在代码里不是很美观，所以Reflect提供了两个方法供我们使用

        // Reflect.has(obj,key); 判断obj对象身上是否有key属性
        console.log(Reflect.has(obj,'name'));//true

        // Reflect.deleteProperty(obj,key); 从obj中删除key属性，并返回是否删除成功的布尔值
        console.log(Reflect.deleteProperty(obj,'sex'));//true
        console.log(obj);//可以发现没有sex属性了


        // 利用这点，我们可以借助bind函数，将has方法和deleteProperty方法放到Object的原型上，即可实现对象可以原生调用has和deleteProperty方法
        Object.prototype.has = function (key) {
            return Reflect.has.bind(this)(this,key);
        }
        Object.prototype.deleteProperty = function(key){
            return Reflect.deleteProperty.bind(this)(this,key);
        }
        let obj2 = {
            name:'jzh',
            age:22,
            sex:'zzz'
        }
        console.log(obj2.has('name'),obj2.deleteProperty('sex'),obj2);
    </script>
</body>

</html>